package io;

import java.io.File;
import java.util.Scanner;

/**
 * @Author @fiber-cloud
 * @Date 2025/10/8 9:25
 * 给定一个目录，目录中包含很多文件和子目录
 * 用户输入一个查询的词，看当前目录下（以及子目录里）是否有匹配的结果（文件名是否匹配）
 * 如果有，就进行删除操作
 */
public class IODemo11 {
    private static Scanner scanner = new Scanner(System.in);
    public static void main(String[] args) {
        System.out.println("请输入要查找的路径：");
        String basePath = scanner.next();

        //针对用户输入进行简单判定
        File root = new File(basePath);
        if (!root.isDirectory()){
            //路径不存在，或者只是一个普通文件，此时无法进行是搜索
            System.out.println("输入的目录有误！");
            return;
        }

        //再次输入要删除的文件名
        System.out.println("请输入要删除的文件名：");
        //这里要使用next，不要使用nextLine
        String nameToDelete = scanner.next();


        //对指定路径进行扫描——递归操作，
        // 先从根目录出发（root）
        // 在当前目录中，是否包含要删除的文件，如果是，就删除，否则就跳过下一个、
        // 如果当前目录中，包含了一些目录，再针对子目录进行递归
        scanDir(root,nameToDelete);
    }

    private static void scanDir(File root, String nameToDelete) {
        System.out.println("[scanDir]"+ root.getAbsolutePath());
        //对当前目录进行处理，先列出当前路径下包含的内容
        File[] files = root.listFiles();//看一下这个目录中有什么
        if (files == null){
            //当前目录下没有东西，是一个空目录，结束继续递归
            return;
        }
        //遍历当前列出的结果
        for (File f:files){
            if (f.isDirectory()){
                //如果是目录，进一步递归
                scanDir(f,nameToDelete);
            }else {
                //如果是普通文件，则判定是否要进行删除操作
                if (f.getName().contains(nameToDelete)){
                    System.out.println("真的要删除文件："+f.getAbsolutePath()+"嘛？");
                    String choice = scanner.next();
                    if (choice.equals("y")||choice.equals("Y")){
                        f.delete();
                        System.out.println("删除成功！");
                    }else {
                        System.out.println("删除取消！");
                    }
                }
            }
        }

    }
}
